home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1991 September / 64er_Magazin_91-09_1991_Markt__Technik_de_Side_A.d64 / demo 2.src (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  3KB  |  62 lines

  1. 10 sys36864
  2. 20 .opt oo
  3. 30 *= $c000
  4. 40 ; dieses programm definiert zwei
  5. 50 ; neue basicbefehle
  6. 60 ; - beep     erzeugt einen ton
  7. 70 ; - erase x  loescht bildsch. zeile x
  8. 80 ; nikolaus heusler, muenchen, 3.91
  9. 100 ibas =776;vektor fuer basicbefehl
  10. 110 inter =$a7ae;interpreterschleife
  11. 120 oldbas =$a7e4;alten befehl ausfuehren
  12. 130 sid =54272;soundchip basisadresse
  13. 140 chrget =115;naechstes zeichen holen
  14. 150 illquan =$b248;illegal quantity error
  15. 160 getx =$b79e;holt byte-wert nach x
  16. 170 clrx =59903;loescht bildschirmzeile x
  17. 180 ok =$e18d;ok ausgeben
  18. 190 tmp =2;zwischenspeicher
  19. 200 ptr =122;zeiger auf basicbefehl
  20. 300 ; --- neue befehle definieren
  21. 310 lda #<neubef:ldy #>neubef;zeiger auf neue routine
  22. 320 sta ibas:sty ibas+1;vektor verbiegen
  23. 330 jmp ok;ok ausgeben
  24. 400 ; --- neue befehls-routine
  25. 410 neubef lda ptr:ldy ptr+1:sta tmp:sty tmp+1;basic-pointer retten:ldx #0
  26. 420 ; --- test, ob befehl nr. 1
  27. 430 test1 jsr chrget;naechstes zeichen holen:cmp text1,x;befehlswort pruefen
  28. 440 bne nein1;wenn nicht, dann befehl 2 pruefen
  29. 450 inx:cpx #4;laenge des befehlswortes:bne test1;nicht erreicht, weiter testen
  30. 460 jsr pieps;befehl ausfuehren
  31. 470 ; --- neuen befehl fertig ausgefuehrt
  32. 480 fertig jmp inter;weiter mit interpreterschleife
  33. 500 ; --- war nicht der erste befehl
  34. 510 nein1 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen:ldx #0
  35. 520 ; --- test, ob befehl nr. 2
  36. 530 test2 jsr chrget;naechstes zeichen holen:cmp text2,x;befehlswort pruefen
  37. 540 bne nein2;wenn nicht, dann fertig
  38. 550 inx:cpx #5;laenge des befehlswortes:bne test2;nicht erreicht, weiter testen
  39. 560 jsr loesch;befehl ausfuehren
  40. 570 jmp fertig;und weiter wie oben
  41. 600 ; --- war nicht der zweite befehl
  42. 610 nein2 lda tmp:ldy tmp+1:sta ptr:sty ptr+1;pointer zurueckholen
  43. 620 jmp oldbas;alten basic-befehl ausfuehren
  44. 700 ; --- routinen der neuen befehle
  45. 710 ; --- befehl 1 - ton ausgeben
  46. 720 pieps jsr chrget;naechstes zeichen:lda #0:ldx #24;sid-register loeschen
  47. 730 clrsid sta sid,x:dex:bpl clrsid;null in alle register schreiben
  48. 740 lda #15:sta sid+24;lautstaerke auf 15
  49. 750 lda #100:sta sid+1;tonhoehe:lda #240:sta sid+6;wellenform
  50. 760 lda #17:sta sid+4;ton ein
  51. 770 ldx #0:ldy #0;warteschleife
  52. 780 wait nop:dex:bne wait:dey:bne wait;wartet ca. 1/2 sekunde
  53. 790 lda #16:sta sid+4;ton aus:rts;fertig
  54. 800 ; befehl 2 - bildschirmzeile loeschen
  55. 810 loesch jsr chrget;naechstes zeichen:jsr getx;nummer der zeile holen
  56. 820 cpx #25;groesser als 24:bcc stimmt;kleiner, dann ok
  57. 830 jmp illquan;sonst fehlermeldung ausgeben
  58. 840 stimmt jsr clrx;bildschirmzeile nr. x loeschen:rts;fertig
  59. 900 ; --- befehls-texte
  60. 910 text1 .asc "beep";text im ascii-code
  61. 920 text2 .asc "erase";text im ascii-code
  62.